﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using TCC_Hotel.Entidades;
using TCC_Hotel.Repositorio;
using System.Web.Caching;

namespace TCC_Hotel.Serviços.BDServices
{
    public class FornecedorService
    {
        FornecedorRepositorio repositorio = new FornecedorRepositorio();

        /// <summary>
        /// Serviço para inserir um fornecedor no banco
        /// </summary>
        /// <param name="funcionario">fornecedor que será inserido</param>
        /// <returns>True se foi inserido ou false se nao</returns>
        public bool CadastrarFornecedor(Fornecedor produto)
        {
            return repositorio.CadastrarFornecedor(produto);

        }
        /// <summary>
        /// Retorna os fornecedores do banco de dados
        /// </summary>
        /// <returns>Lista com os apartamentos</returns>
        public List<Fornecedor> RecuperarFornecedores()
        {
            return repositorio.RecuperarFornecedores();
        }

        /// <summary>
        /// Edita um fornecedor no banco de dados
        /// </summary>
        /// <param name="apartamento">novo fornecedor</param>
        /// <param name="numero">numero do fornecedor que vai ser editado</param>
        /// <returns>retorna true se editou ou false se não</returns>
        public bool EditarFornecedor(int ID, Fornecedor fornecedor)
        {
            return repositorio.EditarFornecedor(ID, fornecedor);
        }

        /// <summary>
        /// Retorna o fornecedor especifico do banco de dados
        /// </summary>
        /// <returns>fornecedor recuperado</returns>
        public Fornecedor RecuperarDetalhesFornecedor(int ID)
        {
            return repositorio.RecuperarDetalhesFornecedor(ID);
        }

        /// <summary>
        /// Verifica se a informação ja esta gravada em cache, se tiver recupera, 
        /// senao faz a consulta e grava em cache
        /// </summary>
        /// <returns>Lista de apartamentos</returns>
        public List<Fornecedor> ListarFornecedoresCache()
        {
            List<Fornecedor> fornecedores = new List<Fornecedor>();

            //Verifica se a informação esta guardada em cache
            if (HttpContext.Current.Cache.Get("Lista_Fornecedores") == null)
            {
                //Consulta as apartamentos no banco
                fornecedores = RecuperarFornecedores();

                //Armazena a lista de apartamentos em cache de 1 minuto para evitar muitas consultas ao banco
                HttpContext.Current.Cache.Add("Lista_Fornecedores", fornecedores, null,
                                 DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration, CacheItemPriority.High, null);

            }

           //caso essa informaçao ja estiver no cache
            else
            {
                //Resgata informação do cache
                fornecedores = (List<Fornecedor>)HttpContext.Current.Cache.Get("Lista_Fornecedores");

            }

            return fornecedores;
        }
    }
}